import re
import csv

from networkx import utils


class utils_test:
    def test_regex(self):  # 正规式测试函数
        # 正规式：
        pattern_1 = r'[a-z0-9][a-z0-9_]*[a-z0-9]'  # 小写字母、数字、下划线，并且不能以下划线开头和结尾
        pattern_2 = r'[a|b]*[1-9]+[0-9]*[y|m|w|d]'  # x年、月、日以后（前）
        pattern_3 = r'[c|f|hf][y|q|m|w|d]'  # 自然年、财年
        pattern_4 = r'[s|y|q|m|w|f]{1}td'  # 历史、年、季度、月、周、财年截止到当前日
        pattern_5 = r'[1-9]+[h|m|s]'  # 最近x小时、分钟、秒
        # pattern_6 = r'[y|q|m|f]t[d]'  #年、季度、月、财年截止到当日
        pattern_7 = r'dt[Nm|h|r]'  # 零点截止到当前分钟、小时、当前时刻
        pattern_8 = r'[h|m]tr'  # 小时、分钟截止到当前
        pattern_9 = r'at[d|h|r]'  # 活动开始截止到当前天、小时、当前时间
        pattern_10 = r'[rw|rm|ry|qh]'  # 上周四到本周三（）报表周、一刻钟
        pattern_11 = r'[p|f][1-9][0-9]*t[1-9][0-9]*[d|w|m|y]'  # 日期f1t10y未来1到10年
        pattern_12 = r'[p|f]*[1-9]+[0-9]*[d|w|m|y|h|min|sec]'  # f10d未来10天
        # pattern = re.compile(r'{}|{}|{}|{}|{}|{}|{}|{}|{}|{}|{}'.format(
        #     pattern_1, pattern_2, pattern_3, pattern_4, pattern_5, pattern_6,
        #     pattern_7, pattern_8, pattern_9, pattern_10, pattern_11,
        #     pattern_12)) # 拼接正规式
        # 正规式列表
        patterns = [
            pattern_1, pattern_2, pattern_3, pattern_4, pattern_5, pattern_7,
            pattern_8, pattern_9, pattern_10, pattern_11, pattern_12
        ]
        # 测试用例
        cases = [
            'adsa_9sadas_', '', '__', '000_0sad_', '__asdas', '___dsadsa',
            '_sadas', 'sdasda_sadsad', 'sadads_12das', 'p12d', 'f12d',
            'f12dt10d', 'std', 'ytd', 'p10d', 'f10dt11d', '1d', '3d', '1w',
            '2w', '3m', '6m', 'b6m', 'a6m', 'cw', 'cm', 'cq', 'fy', 'hfy',
            'std', 'ytd', 'qtd', 'mtd', 'wtd', 'ftd', '1h', '2w', 'dtNm',
            'dth', 'dtr', 'htr', 'mtr', 'atd', 'ath', 'atr', 'p1w', 'p1m',
            'rw', 'qh'
        ]
        # 测试日志
        log_file = open(r"./test_log/regex_test.log", 'w')
        # 迭代测试
        for pattern in patterns:
            # print("待测的正规式：{}".format(pattern))
            pattern_name = pattern
            pattern = re.compile(pattern)
            # print(pattern)
            for case in cases:
                # if pattern.fullmatch(case):
                #     print("第{}个字符串{}符合规范。".format(cases.index(case), case))
                if not pattern.fullmatch(case):
                    # print("第{}个字符串{}\t不符合正规式{}".format(cases.index(case), case, pattern_name))
                    print("第{}个字符串{}\t不符合正规式{}".format(cases.index(case), case, pattern_name), file=log_file)
                else:
                    # print("第{}个字符串{}\t符合正规式{}".format(cases.index(case), case, pattern_name))
                    print("第{}个字符串{}\t符合正规式{}".format(cases.index(case), case, pattern_name), file=log_file)
            print('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~', file=log_file)
        log_file.close()
        return


def main():
    tester = utils_test()
    tester.test_regex()


if __name__ == '__main__':
    main()
